<?php
/**Todo lo que tiene que ver con la Base de Datos**/
/*** Abrir una conexión a la base de datos ***/
function abrirConexionBD()
{
  global $servidorBaseDatos, $usuarioBaseDatos, $claveBaseDatos, $nombreBaseDatos, $puertoBaseDatos;
  //$conexion = pg_connect("dbname=adminxi_zeti host=74.50.84.133 port=5432 user=adminxi_zeti password=zetizeti");
  //$conexion = pg_connect("dbname=zeti host=localhost port=5432 user=postgres password=13579");
  $conexion = pg_connect("dbname=$nombreBaseDatos host=$servidorBaseDatos port=$puertoBaseDatos user=$usuarioBaseDatos password=$claveBaseDatos");
  pg_query('SET SESSION DATESTYLE TO SQL, DMY');
  return $conexion;
}

/*** Cerrar una conexión establecida con la base de datos ***/
function cerrarConexionBD($conexion)
{
    $cierre = pg_close($conexion);
    return $cierre;
}

/*** Ejecutar una consulta en la base de datos ***/
function consultaBD($consulta,$imprimirConsulta=false)
{/*
  debug($consulta,"consultaBD=>");
	
  echo "consultaBD=>".$consulta;*/
  global $debug;
  if($imprimirConsulta==true)
  {
    debug($consulta,"consultaBD=>");
	 
  }
  $resultado = pg_query($consulta);
  //debug($resultado,"consultadfddfdf=>");
  return $resultado;
}

/*** Seleccionar una base de datos ***/
function seleccionarBD($baseDatos)
{
    //$resultado = pg_select_db($baseDatos);
    //return $resultado;
}

/*** Retornar el numero de filas devueltas por la consulta dada ***/
function filasDevueltas($resultado)
{
    $filas = pg_num_rows($resultado);
    return $filas;
}

/*** Retornar el numero de campos devueltos por la consulta dada ***/
function num_fields($resultado)
{
  return pg_num_fields($resultado);
}

/*** Retornar el numero de filas afectadas por la consulta dada ***/
function filasAfectadas($rs)
{
    return pg_affected_rows($rs);
}

/*** Convertir los datos de una fila resultado de una consulta en objeto ***/
function filaEnObjeto($resultado)
{
    $fila = pg_fetch_object($resultado);
    return $fila;
}

/*** Convertir los datos de una fila resultado de una consulta en arreglo ***/
function filaEnArreglo($resultado)
{
    $fila = pg_fetch_array($resultado);
    return $fila;
}

/// 
function buscarIdenTabla($tabla , $columna , $valor, $columnaId="")
{
  if($columnaId=="")
    $columnaId = substr($tabla,0,3)."_id";
  $consulta = "SELECT $columnaId FROM $tabla WHERE $columna = '$valor'";
  $resultado = consultaBD($consulta);
  $row = filaEnArreglo($resultado);
  return $row[0];
}

/////
// Returns array contains metadata
// $db: Database connection resource
// $table: Table name

function MetaData($db, $table) {
  $rows = 0; // Number of rows
  $qid = 0; // Query result resource
  $meta = array(); // Metadata array - return value

  // See PostgreSQL developer manual (www.postgresql.org) for system table spec.
  // Get catalog data from system tables.
  $sql = 'SELECT a.attnum, a.attname, t.typname, a.attlen, a.atttypmod, a.attnotnull, a.atthasdef FROM pg_class as c, pg_attribute a, pg_type t WHERE a.attnum > 0 and a.attrelid = c.oid and c.relname = '."'$table'".' and a.atttypid = t.oid order by a.attnum';
  $qid = pg_Exec($db, $sql);

  // Check error
  if (!is_resource($qid))
  {
    print('MetaData(): Query Error - table does not exist');
    return null;
  }

  $rows = pg_NumRows($qid);
  // Store meta data
  for ($i = 0; $i < $rows; $i++) {
    $field_name = pg_Result($qid,$i,1); // Field Name
    $meta[$field_name]['id'] = pg_Result($qid,$i,0); // Attrbute ID
    $meta[$field_name]['type'] = pg_Result($qid,$i,2); // Data type name
    $meta[$field_name]['len'] = pg_Result($qid,$i,3); // Length: -1 for variable length
    $meta[$field_name]['modifier'] = pg_Result($qid,$i,4); // Modifier
    $meta[$field_name]['notnull'] = (pg_Result($qid,$i,5) === 't' ? TRUE : FALSE); // Not NULL?
    $meta[$field_name]['hasdefault'] = (pg_Result($qid,$i,6) === 't' ? TRUE : FALSE); // Has default value?
  }

}

function consultarCampo($sql, $debug = false)
{
  $rs = consultaBD($sql, $debug);
  if($arreglo = filaEnArreglo($rs))
    return $arreglo[0];
  return null;
}

function consultarCampos($sql, $debug = false)
{
  $rs = consultaBD($sql, $debug);
  if($arreglo = filaEnArreglo($rs))
    return $arreglo;
  return null;
}

function consultarColumna($sql,$columna=0,$debug = false)
{
  $rs = consultaBD($sql,$debug);
  $arreglo = array();
  while($fila = filaEnArreglo($rs))
  {
    $arreglo[] = $fila[$columna];
  }
  return $arreglo;
}

function ultimoId()
{
  return consultarCampo("SELECT lastval()");
}

/*Funciones que permiten la consulta de la BD y realizar las diferentes acciones*/
function insert($tabla, $campos, $debug = false)
{
  $sql = "INSERT INTO \"$tabla\" (\"".implode("\",\"",array_keys($campos))."\") VALUES";
  
  $camposSQL = array();
  foreach($campos as $v)
  {
    if(is_null($v))
      $camposSQL[] = "NULL";
    elseif(is_int($v))
      $camposSQL[] = $v;
    elseif(is_string($v))
      $camposSQL[] = "'".$v."'";
    elseif(is_bool($v))
    {
      if($v === false)
        $camposSQL[] = 'FALSE';
      elseif($v === true)
        $camposSQL[] = 'TRUE';
    }
  }
  
  $sql .= "(".implode(", ", $camposSQL).")";
  return consultaBD($sql, $debug);
}

function update($tabla, $campos,$where, $debug = false)
{
  $sql = "UPDATE \"$tabla\" SET ";
  
  $camposSQL = array();
  foreach($campos as $k => $v)
  {
    if(is_null($v))
      $camposSQL[$k] = "NULL";
    elseif(is_int($v))
      $camposSQL[$k] = $v;
    elseif(is_string($v))
      $camposSQL[$k] = "'".$v."'";
    elseif(is_bool($v))
    {
      if($v === false)
        $camposSQL[$k] = 'FALSE';
      elseif($v === true)
        $camposSQL[$k] = 'TRUE';
    }
  }
  
  foreach($camposSQL as $k => $v)
    $sql .= "$k = $v, ";

  $sql = substr($sql,0,-2);// quitar la ultima coma
  $sql .=' WHERE ';
  
  $camposSQL = array();
  if(is_array($where))
  {
    foreach($where as $k => $v)
    {
      if(is_null($v))
        $camposSQL[] = $k.' IS NULL';
      elseif(is_int($v))
        $camposSQL[] = $k.' = '.$v;
      elseif(is_string($v))
        $camposSQL[] = $k.' = \''.$v."'";
      elseif(is_bool($v))
      {
        if($v === false)
          $camposSQL[] = $k.' = FALSE';
        elseif($v === true)
          $camposSQL[] = $k.' = TRUE';
      }
    }
    $sql .= implode(' AND ', $camposSQL);
  }
  else
    $sql .= $where;
  
  return consultaBD($sql, $debug);
}


function sqldelete($tabla, $campos = '1')
{
  
  $sql = 'DELETE FROM "'.$tabla.'" WHERE ';
  
  $camposSQL = array();
  if(is_array($campos))
  {
    foreach($campos as $k => $v)
    {
      if(is_null($v))
        $camposSQL[] = $k.' IS NULL';
      elseif(is_int($v))
        $camposSQL[] = $k.' = '.$v;
      elseif(is_string($v))
        $camposSQL[] = $k.' = \''.$v."'";
      elseif(is_bool($v))
      {
        if($v === false)
          $camposSQL[] = $k.' = FALSE';
        elseif($v === true)
          $camposSQL[] = $k.' = TRUE';
      }
    }
    $sql .= implode(' AND ', $camposSQL);
  }
  else
    $sql .= '1';

  return consultaBD($sql);
}

function select($campos, $tablas = '', $where = '1')
{

  $sql = 'SELECT ';
  if(is_array($campos))
    $sql .= implode(', ', $campos);
  else
    $sql .= $campos;

  $sql .= ' FROM ';
  
  if(is_array($tablas))
    $sql .= implode(', ', $tablas);
  else
    $sql .= $tablas;
  
  $sql .= ' WHERE ';
  $camposSQL = array();
  if(is_array($where))
  {
    foreach($where as $k => $v)
    {
      if(is_null($v))
        $camposSQL[] = $k.' IS NULL';
      elseif(is_int($v))
        $camposSQL[] = $k.' = '.$v;
      elseif(is_string($v))
        $camposSQL[] = $k.' = \''.$v."'";
      elseif(is_bool($v))
      {
        if($v === false)
          $camposSQL[] = $k.' = FALSE';
        elseif($v === true)
          $camposSQL[] = $k.' = TRUE';
      }
    }
    $sql .= implode(' AND ', $camposSQL);
  }
  else
    $sql .= $where;

  $rs = consultaBD($sql);
  if($arreglo = filaEnArreglo($rs))
    return $arreglo;
  else
    return null;
}


function where($conds)
{
  $camposSQL = array();
  $sql = '';
  foreach($conds as $k => $v)
  {
    if(is_null($v))
      $camposSQL[] = $k.' IS NULL';
    elseif(is_int($v))
      $camposSQL[] = $k.' = '.$v;
    elseif(is_string($v))
      $camposSQL[] = $k.' = \''.$v."'";
    elseif(is_bool($v))
    {
      if($v === false)
        $camposSQL[] = $k.' = FALSE';
      elseif($v === true)
        $camposSQL[] = $k.' = TRUE';
    }
    elseif(is_array($v))
      $camposSQL[] = $k.' IN ('.implode(', ', $v).')';
  }
  $sql .= implode(' AND ', $camposSQL);
  return $sql;
}
?>